README file for RESTAT ms 16767 Are Tenure Track Professors Better Teachers? (Figlio, Schapiro, and Soter)

This paper makes use of confidential data from the Northwestern University offices of Admission and Registrar. Parties interested in accessing de-identified data to replicate this work must obtain permission from both offices. Once permissions are arranged, corresponding author David Figlio (figlio@northwestern.edu) will send a copy of the analysis dataset that will permit researchers to replicate the results in the paper.

The following is the code used to generate the regression tables in the paper.

/*Table 2: Estimated effects of contingent faculty on subsequent course-taking (second_class) and performance (second_grade) in the subject*/

*row 1;
reg second_class adjunct if first<=2008, cluster(random_instructor_number);
reg second_grade adjunct if first<=2008, cluster(random_instructor_number);

reg second_class adjunct if first<=2008 & major==0, cluster(random_instructor_number);
reg second_grade adjunct if first<=2008 & major==0, cluster(random_instructor_number);

*row 2: student fixed effects;
areg second_class adjunct if first<=2008, absorb(fake_id) cluster(random_instructor_number);
areg second_grade adjunct if first<=2008, absorb(fake_id) cluster(random_instructor_number);

areg second_class adjunct if first<=2008 & major==0, absorb(fake_id) cluster(random_instructor_number);
areg second_grade adjunct if first<=2008 & major==0, absorb(fake_id) cluster(random_instructor_number);

*row 3: student fixed effects and next-class fixed effects;
*note: mmX is deviation from student means;

areg ammsecond_grade ammadjunct if first<=2008 , absorb(unique_class) cluster(random_instructor_number);

areg mmsecond_grade mmadjunct if first<=2008 & major==0, absorb(unique_class) cluster(random_instructor_number);

*row 4: also controlling for home country and experience in years;

areg ammsecond_grade ammadjunct ammexperience1 ammexpmiss ammenglish1 ammengmiss if first<=2008 , absorb(unique_class) cluster(random_instructor_number);

areg mmsecond_grade mmadjunct mmexperience1 mmexpmiss mmenglish1 mmengmiss if first<=2008 & major==0, absorb(unique_class) cluster(random_instructor_number);

*row 5: also controlling for home country and experience in bins;

areg ammsecond_grade ammadjunct ammeg1-ammeg6 ammexpmiss ammenglish1 ammengmiss if first<=2008 , absorb(unique_class) cluster(random_instructor_number);

areg mmsecond_grade mmadjunct mmeg1-mmeg6 mmexpmiss mmenglish1 mmengmiss if first<=2008 & major==0, absorb(unique_class) cluster(random_instructor_number);

/*Table 3: Differences by instructor experience*/

areg mmsecond_grade mmadjunct if first<=2008 & major==0 & experience<=5, absorb(unique_class) cluster(random_instructor_number);

areg mmsecond_grade mmadjunct if first<=2008 & major==0 & experience>5 & experience<=12, absorb(unique_class) cluster(random_instructor_number);

areg mmsecond_grade mmadjunct if first<=2008 & major==0 & experience>12 & experience<99, absorb(unique_class) cluster(random_instructor_number);

areg mmsecond_grade mmadjunct mmenglish mmengmiss if first<=2008 & major==0 & experience<=5, absorb(unique_class) cluster(random_instructor_number);

areg mmsecond_grade mmadjunct mmenglish mmengmiss if first<=2008 & major==0 & experience>5 & experience<=12, absorb(unique_class) cluster(random_instructor_number);

areg mmsecond_grade mmadjunct mmenglish mmengmiss if first<=2008 & major==0 & experience>12 & experience<99, absorb(unique_class) cluster(random_instructor_number);

/*Table 4: Differences by instructor attributes*/

areg ammsecond_grade ammassistant ammpart_timer4 ammfull_timer4 if first<=2008 , absorb(unique_class) cluster(random_instructor_number);

areg mmsecond_grade mmassistant mmpart_timer4 mmfull_timer4 if first<=2008 & major==0, absorb(unique_class) cluster(random_instructor_number);

areg ammsecond_grade ammassistant ammpart_timer4 ammfull_timer4  ammenglish1 ammengmiss if first<=2008 , absorb(unique_class) cluster(random_instructor_number);

areg mmsecond_grade mmassistant mmpart_timer4 mmfull_timer4  mmenglish1 mmengmiss if first<=2008 & major==0, absorb(unique_class) cluster(random_instructor_number);

/*Table 5: Differences my major challenge*/
*note: declarer is the average SAT scores of students declaring the major, avgresid is the average residual grade in a major. Cutoffs are included so that the interested reader can see the distributions;

areg mmsecond_grade mmadjunct  if first<=2008 & declarer<1403.9, absorb(unique_class) cluster(random_instructor_number);

areg mmsecond_grade mmadjunct  if first<=2008 & declarer>=1403.9 & declarer<1413.6, absorb(unique_class) cluster(random_instructor_number);

areg mmsecond_grade mmadjunct  if first<=2008 & declarer>=1413.6 & declarer<=1600, absorb(unique_class) cluster(random_instructor_number);

areg mmsecond_grade mmadjunct  if first<=2008 & major==0 & declarer<1403.9, absorb(unique_class) cluster(random_instructor_number);

areg mmsecond_grade mmadjunct  if first<=2008 & major==0 & declarer>=1403.9 & declarer<1413.6, absorb(unique_class) cluster(random_instructor_number);

areg mmsecond_grade mmadjunct  if first<=2008 & major==0 & declarer>=1413.6 & declarer<=1600, absorb(unique_class) cluster(random_instructor_number);

areg mmsecond_grade mmadjunct  if first<=2008 & avgresid<-.208, absorb(unique_class) cluster(random_instructor_number);

areg mmsecond_grade mmadjunct  if first<=2008 & avgresid>=-.208 & avgresid<.123, absorb(unique_class) cluster(random_instructor_number);

areg mmsecond_grade mmadjunct  if first<=2008 & avgresid>=.123 & avgresid~=., absorb(unique_class) cluster(random_instructor_number);

areg mmsecond_grade mmadjunct  if first<=2008 & major==0 & avgresid<-.208, absorb(unique_class) cluster(random_instructor_number);

areg mmsecond_grade mmadjunct  if first<=2008 & major==0 & avgresid>=-.208 & avgresid<.123, absorb(unique_class) cluster(random_instructor_number);

areg mmsecond_grade mmadjunct  if first<=2008 & major==0 & avgresid>=.123 & avgresid~=., absorb(unique_class) cluster(random_instructor_number);

/*Table 7: Differential effects by academic preparation*/

*row 1: by academic preparation;

areg ammsecond_grade ammadjunct  if first<=2008 & academic==1, absorb(unique_class) cluster(random_instructor_number);
areg ammsecond_grade ammadjunct  if first<=2008 & academic==2, absorb(unique_class) cluster(random_instructor_number);
areg ammsecond_grade ammadjunct  if first<=2008 & academic>=3 & academic~=., absorb(unique_class) cluster(random_instructor_number);

*row 2: outside declared major;

areg mmsecond_grade mmadjunct  if first<=2008 & major==0 & academic==1, absorb(unique_class) cluster(random_instructor_number);
areg mmsecond_grade mmadjunct  if first<=2008 & major==0 & academic==2, absorb(unique_class) cluster(random_instructor_number);
areg mmsecond_grade mmadjunct  if first<=2008 & major==0 & academic>=3 & academic~=., absorb(unique_class) cluster(random_instructor_number);

*rows 3-5: by SAT of subjects;

areg mmsecond_grade mmadjunct  if first<=2008 & academic==1 & major==0 & declarer<1403.9, absorb(unique_class) cluster(random_instructor_number);
areg mmsecond_grade mmadjunct  if first<=2008 & academic==1 & major==0 & declarer>=1403.9 & declarer<1413.6, absorb(unique_class) cluster(random_instructor_number);
areg mmsecond_grade mmadjunct  if first<=2008 & academic==1 & major==0 & declarer>=1413.6 & declarer<=1600, absorb(unique_class) cluster(random_instructor_number);

areg mmsecond_grade mmadjunct  if first<=2008 & academic==2 & major==0 & declarer<1403.9, absorb(unique_class) cluster(random_instructor_number);
areg mmsecond_grade mmadjunct  if first<=2008 & academic==2 & major==0 & declarer>=1403.9 & declarer<1413.6, absorb(unique_class) cluster(random_instructor_number);
areg mmsecond_grade mmadjunct  if first<=2008 & academic==2 & major==0 & declarer>=1413.6 & declarer<=1600, absorb(unique_class) cluster(random_instructor_number);

areg mmsecond_grade mmadjunct  if first<=2008 & academic>=3 & major==0 & declarer<1403.9, absorb(unique_class) cluster(random_instructor_number);
areg mmsecond_grade mmadjunct  if first<=2008 & academic>=3 & major==0 & declarer>=1403.9 & declarer<1413.6, absorb(unique_class) cluster(random_instructor_number);
areg mmsecond_grade mmadjunct  if first<=2008 & academic>=3 & major==0 & declarer>=1413.6 & declarer<=1600, absorb(unique_class) cluster(random_instructor_number);

*rows 6-8: by typical grades in subjects;

areg mmsecond_grade mmadjunct  if first<=2008 & academic==1 & major==0 & avgresid<-.208, absorb(unique_class) cluster(random_instructor_number);
areg mmsecond_grade mmadjunct  if first<=2008 & academic==1 & major==0 & avgresid>=-.208 & avgresid<.123, absorb(unique_class) cluster(random_instructor_number);
areg mmsecond_grade mmadjunct  if first<=2008 & academic==1 & major==0 & avgresid>=.123 & avgresid~=., absorb(unique_class) cluster(random_instructor_number);

areg mmsecond_grade mmadjunct  if first<=2008 & academic==2 & major==0 & avgresid<-.208, absorb(unique_class) cluster(random_instructor_number);
areg mmsecond_grade mmadjunct  if first<=2008 & academic==2 & major==0 & avgresid>=-.208 & avgresid<.123, absorb(unique_class) cluster(random_instructor_number);
areg mmsecond_grade mmadjunct  if first<=2008 & academic==2 & major==0 & avgresid>=.123 & avgresid~=., absorb(unique_class) cluster(random_instructor_number);

areg mmsecond_grade mmadjunct  if first<=2008 & academic>=3 & major==0 & avgresid<-.208, absorb(unique_class) cluster(random_instructor_number);
areg mmsecond_grade mmadjunct  if first<=2008 & academic>=3 & major==0 & avgresid>=-.208 & avgresid<.123, absorb(unique_class) cluster(random_instructor_number);
areg mmsecond_grade mmadjunct  if first<=2008 & academic>=3 & major==0 & avgresid>=.123 & avgresid~=., absorb(unique_class) cluster(random_instructor_number);


